//
//  SectionIndexViewController.m
//  UITableViewDemo
//
//  Created by LZXuan on 15-5-18.
//  Copyright (c) 2015年 轩哥. All rights reserved.
//

#import "SectionIndexViewController.h"

#import "UserModel.h"
#define kScreenSize [UIScreen mainScreen].bounds.size


@interface SectionIndexViewController () <UITableViewDataSource,UITableViewDelegate>
{
    //表格视图
    UITableView *_tableView;
    //数据源数组
    NSMutableArray *_dataArr;
}
@property (nonatomic,retain) UITableView *tableView;

@end

@implementation SectionIndexViewController
- (void)dealloc {
    [_dataArr release];
    self.tableView = nil;
    [super dealloc];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self creatTableView];
    
    [self dataInit];
}
#pragma mark - 数据
- (void)dataInit {
    _dataArr = [[NSMutableArray alloc] init];
    
    //创建 26 个一维 数组 把26个数组 放入_dataArr指向的对象
    //每个区分对应一个一维数组
    //每个cell 的数据 是一个整体（学生信息），这个时候我们应该 把这个学生信息封装一个类 (数据模型类) 每个cell 上面的数据 就是一个数据模型对象
    //这时我们就应该 把数据模型对象地址放入对应26个一维数组中
    
    for (NSInteger i = 0; i < 26; i++) {
        //一维数组
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (NSInteger j = 0; j < 10 ; j++) {
            //一维数组的内容 应该是10个UserModel 对象
            UserModel *model = [[UserModel alloc] init];
            model.name = [NSString stringWithFormat:@"%C%ld",(unichar)('A'+i),j];
            model.phoneNumber = [NSString stringWithFormat:@"%u",arc4random()];
            model.sexStr = @"man";
            
            model.headName = [NSString stringWithFormat:@"%04u.jpg",arc4random()%24+33];
            //把模型对象放入数组中
            [arr addObject:model];
            [model release];
        }
        
        //把一维数组放入数据源
        [_dataArr addObject:arr];
        [arr release];
    }
    
    //有了数据之后 刷新表格
    [self.tableView reloadData];
}

#pragma mark - 创建表格
- (void)creatTableView {
    //取消导航条影响
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    self.tableView = [[[UITableView alloc] initWithFrame:CGRectMake(0, 64, kScreenSize.width, kScreenSize.height-64) style:UITableViewStylePlain] autorelease];
    //设置代理和数据源
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    
    //打开系统的编辑按钮
    //每个视图控制器默认自带一个编辑按钮
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    
    
    //一旦把TableView粘贴到view 那么就可以立即执行协议的方法
    [self.view addSubview:self.tableView];
}

#pragma mark - UITableView协议
//有多少分区
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return _dataArr.count;
}
//每个分区有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return [_dataArr[section] count];
}
//cell 显示之前 获取cell
//每次显示cell 都会调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId] autorelease];
    }
    //获取 数据源中数据模型对象
    UserModel *model = _dataArr[indexPath.section][indexPath.row];
    //填充cell  把数据模型的内容显示到cell 上
    
    cell.textLabel.text = model.name;
    cell.detailTextLabel.text = model.phoneNumber;
    cell.imageView.image = [UIImage imageNamed:model.headName];
    
    return cell;
}
//设置 分区 头标
// A B C D...
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [NSString stringWithFormat:@"%C",(unichar)('A'+section)];
}

#pragma mark - 分区索引
//协议方法
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSMutableArray * titleArr = [[NSMutableArray alloc] init];
    
    for (NSInteger i = 0; i < 26; i++) {
        //设置26个分区的索引
        [titleArr addObject:[NSString stringWithFormat:@"%C",(unichar)('A'+i)]];
    }
    [titleArr addObject:@"#"];
    //返回一个数组
    return [titleArr autorelease];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    NSLog(@"index:%ld title:%@",index,title);
    return index;//选中右侧索引之后 返回 指定分区的索引值
}


@end



